#include <QCoreApplication>
#include <QDebug>
#include <QTimer>
#include <QDir>
#include <QJsonObject>
#include <QJsonDocument>
#include <QDateTime>
#include <QTcpSocket>
#include <QTcpServer>
#include <QFile>

// 创建一个简化版的机器人管理器，用于测试时间同步功能
class SimpleRobotManager : public QObject
{
    Q_OBJECT

public:
    explicit SimpleRobotManager(QObject *parent = nullptr) : QObject(parent) {
        // 初始化时间同步日志文件
        QString logDir = QCoreApplication::applicationDirPath() + "/logs";
        QDir dir(logDir);
        if (!dir.exists()) {
            dir.mkpath(logDir);
        }
        
        QString logFileName = logDir + "/time_sync.log";
        m_timeSyncLog.setFileName(logFileName);
    }
    
    bool sendTimeSyncCommand(const QString &sn) {
        // 创建时间同步消息
        QJsonObject timeSyncMessage;
        timeSyncMessage["type"] = "time_sync";
        timeSyncMessage["timestamp"] = QDateTime::currentMSecsSinceEpoch();
        timeSyncMessage["sync_id"] = "test_sync_id";
        
        // 记录日志
        logTimeSyncCommand(sn, "test_sync_id", true);
        
        qDebug() << QString("模拟发送时间同步命令到机器人 %1: %2").arg(sn).arg(
            QString(QJsonDocument(timeSyncMessage).toJson(QJsonDocument::Compact)));
        
        // 模拟发送成功
        return true;
    }

private:
    QFile m_timeSyncLog;
    
    void logTimeSyncCommand(const QString &robotSN, const QString &syncId, bool success) {
        // 确保日志文件已打开
        if (!m_timeSyncLog.isOpen()) {
            if (!m_timeSyncLog.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text)) {
                qDebug() << "无法打开时间同步日志文件：" << m_timeSyncLog.fileName();
                return;
            }
        }
        
        // 创建日志条目
        QJsonObject logEntry;
        logEntry["timestamp"] = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz");
        logEntry["robot_sn"] = robotSN;
        logEntry["sync_id"] = syncId;
        logEntry["success"] = success;
        
        // 将日志条目转换为JSON字符串并写入文件
        QJsonDocument logDoc(logEntry);
        QByteArray logData = logDoc.toJson(QJsonDocument::Compact) + "\n";
        
        m_timeSyncLog.write(logData);
        m_timeSyncLog.flush(); // 确保立即写入磁盘
        
        qDebug() << QString("时间同步命令已记录到日志文件：%1").arg(m_timeSyncLog.fileName());
    }
};

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
    
    qDebug() << "=== RobotManager 时间同步功能测试 ===";
    
    // 创建简化版RobotManager实例
    SimpleRobotManager *robotManager = new SimpleRobotManager();
    
    // 模拟发送时间同步命令
    QTimer::singleShot(1000, [robotManager]() {
        qDebug() << "测试发送时间同步命令...";
        
        // 发送时间同步命令到机器人GZJY001
        bool success = robotManager->sendTimeSyncCommand("GZJY001");
        qDebug() << "发送结果:" << (success ? "成功" : "失败");
        
        // 检查日志文件是否创建
        QString logDir = QCoreApplication::applicationDirPath() + "/logs";
        QString logFile = logDir + "/time_sync.log";
        QFile file(logFile);
        if (file.exists()) {
            qDebug() << "时间同步日志文件已创建:" << logFile;
        } else {
            qDebug() << "时间同步日志文件未找到:" << logFile;
        }
        
        // 退出程序
        QTimer::singleShot(1000, []() {
            QCoreApplication::quit();
        });
    });
    
    qDebug() << "测试程序启动，1秒后开始发送时间同步命令...";
    
    return app.exec();
}

#include "time_sync_test.moc"